package com.learn.algorithm_1;

import org.junit.Test;

/**
 * @author gatts, 2022/1/19 10:21
 */
public class GpuTaskCost {

    @Test
    public void test() {
        int maxRun = 4, taskArrLength = 5;
        int[] taskArr = {5, 4, 1, 1, 1};
        System.out.println(timeCost(maxRun, taskArrLength, taskArr));
    }

    /**
     * 计算gpu耗时
     * @param maxRun Gpu一次最多执行 maxRun 个任务，一次执行一秒钟
     * @param taskArrLength 任务数组长度
     * @param taskArr 任务数组，元素为任务个数，每一秒新增一次任务
     * @return 返回执行时间
     */
    public long timeCost(int maxRun, int taskArrLength, int[] taskArr) {
        /**
         * maxRun = 3, taskArrLength = 5
         * taskArr = {1, 2, 3, 4, 5}
         * 6秒钟
         */
        int taskLeft = 0;
        long cost = 0;

        for (int i = 0; i < taskArr.length; i++) {
            // 至少会执行一秒，因为一秒新增一次任务，如果上次有没执行完的，会累加时间
            cost += Math.max(((taskArr[i] + taskLeft) / maxRun), 1);
            taskLeft = taskArr[i] > maxRun ? taskArr[i] % maxRun : 0;
        }

        return cost;
    }

}
